\section{Explication du problème}
\label{expl-distrib}
Les données du problème sont donc les suivantes: nous avons plusieurs sites, un code d'un programme de contrôle et nous voulons distribuer celui-ci (automatiquement) sur ces différents sites. Évidemment, nous voulons que cette distribution soit optimale en termes de performance, donc en n'autorisant qu'un minimum de communications entre les sites. En effet, une communication sur un réseau prend du temps et nous voulons être capables de réagir aux situations le plus rapidement possible. Dans ce chapitre, le problème de la distribution sera détaillé et une solution (venant de~\cite{BDeW}) sera donnée. \\

Avant de commencer la distribution, nous devons fixer certaines règles. La première, la plus importante: toute instruction, en dSL, est atomique. Ceci signifie qu'elle doit s'exécuter d'une traite, sans interruptions et sur un même site. Ceci se traduit par le fait que chaque variable utilisée dans une instruction doit être située sur le même site que cette instruction. En plus de cette règle de base vient s'ajouter une autre règle tout aussi importante: le bloc \texttt{WHEN} est, lui aussi, atomique. Ceci signifie que la condition et le corps du bloc doivent obligatoirement se trouver sur un même site. Enfin, un morceau de code séquentiel (une \texttt{SEQUENCE}) peut être distribué sur les différents sites. Rappelons, enfin, que le contenu d'une \texttt{METHOD} peut être soit atomique, soit séquentiel, dépendant du contexte de l'appel. \\

Une analogie entre ce problème de distribution et un problème de coloration de graphe peut être faite. En effet, si les instructions et les variables sont considérées comme étant des n\oe{}uds et les sites comme étant des couleurs, le problème de distribution revient à trouver une coloration qui satisfait certaines propriétés demandées, comme la minimisation des transmissions. C'est de cette manière que le problème (et sa solution) sera exprimé dans la suite de ce chapitre. Illustrons cette manière de voir le problème par un exemple d'un petit morceau de code (figure~\ref{fig-code-ex-distrib-01}) et le graphe (figure~\ref{fig-graph-ex-distrib-01}) qu'on peut créer à partir de celui-ci. \\

\begin{figure}[!h]
	{\centering
		\small
		\begin{verbatim}
			SEQUENCE mySequence()
			    a := TRUE;
			    b := 3;
			END_SEQUENCE
		\end{verbatim}
	}
	\caption{Un petit morceau de code \textsl{dSL}, très simple}
	\label{fig-code-ex-distrib-01}
\end{figure}
	
\begin{figure}[htb]
	\begin{center}
		\includegraphics[scale=0.7]{Images/image_3_1.pdf}
		\caption{\textsl{Graphe} basique montrant les liens entre variables et instructions}
		\label{fig-graph-ex-distrib-01}
	\end{center}
\end{figure}

\bigskip
Grâce à cette représentation du code, si deux n\oe{}uds reliés sont de couleurs différentes, la distribution est fausse. En effet, cela signifierait, par exemple, qu'une variable se trouve sur un site A et qu'une instruction, utilisant cette variable, se trouve sur un site B. La propriété d'atomicité des instructions n'est donc pas respectée. \\

Pour résumer, le problème de distribution revient à trouver une coloration d'un graphe telle que les n\oe{}uds connectés entre eux soient de la même couleur et que le nombre de transmissions entre les sites soit minimal. La distribution se passe en deux étapes: dans un premier temps, tous les morceaux de code atomiques sont colorés et, ensuite, les instructions séquentielles le sont à leur tour. Les sections~\ref{distrib-first-step} et~\ref{distrib_algo_second_step} décrivent les deux étapes de la distribution. La section~\ref{distrib_example} illustre ces deux étapes sur l'exemple de la section~\ref{dslProgExample}.